package com.LC._213;

//class Solution {
//    public int rob(int[] nums) {
//
//        if (nums.length==1) return nums[0];
//        int[][] dp = new int[nums.length][2];
//        for(int i=0;i<dp.length;i++){
//            dp[i][0] = -1;
//            dp[i][1] = -1;
//        }
//        dp[0][0] = 0;
//        dp[0][1] = nums[0];
//        for(int i=1;i<nums.length;i++){
//            dp[i][0] = Math.max(dp[i-1][1],dp[i][0]);
//            dp[i][1] = dp[i-1][0]+nums[i];
//        }
//        if(dp[0][1]!=-1){//如果
//            return dp[nums.length-1][0];
//        }
////        if(dp[nums.length-1][0]!=0){
////            return Math.max(dp[nums.length-1][0] ,dp[nums.length-1][1]);
////        }
//        return Math.max(dp[nums.length-1][0] ,dp[nums.length-1][1]);
//    }
//
//    public static void main(String[] args) {
//        Solution solution = new Solution();
//        int[] nums=new int[]{2,3,2};
//        System.out.println(solution.rob(nums));
//    }
//}

class Solution {
    public int rob(int[] nums) {
        if (nums.length==1) return nums[0];
        // 转换成打家劫舍I: 第一个房子不偷，或者最后一个房子不偷
        return Math.max(solve(0, nums.length-2, nums) , solve(1, nums.length-1, nums));
    }
    private int solve(int low, int hi, int[] nums) {
        int[][] dp = new int[hi-low+3][2];
        dp[low][0]=0;
        dp[low][1]=nums[low];
        for(int i=low+1; i<=hi; i++){
            dp[i][0] = Math.max(dp[i-1][1],dp[i-1][0]);
            dp[i][1] = dp[i-1][0]+nums[i];
        }
        return Math.max(dp[hi][0],dp[hi][1]);
//        int pre=0;
//        int now=0;
//        for (int i=low; i<=hi; i++) {
//            int t = now;
//            now = Math.max(now, nums[i]+pre);
//            pre = t;
//        }
//        return now;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] nums=new int[]{2,3,2};
        System.out.println(solution.rob(nums));
    }
}